home *** CD-ROM | disk | FTP | other *** search
- Path: uunet!rs
- From: rs@uunet.UU.NET (Rich Salz)
- Newsgroups: comp.sources.unix
- Subject: v10i065: Pascal to C translator, Part01/12
- Message-ID: <704@uunet.UU.NET>
- Date: 27 Jul 87 23:01:10 GMT
- Organization: UUNET Communications Services, Arlington, VA
- Lines: 1589
- Approved: rs@uunet.UU.NET
-
- Submitted-by: Per Bergsten <mcvax!enea!chalmers!holtec!perb>
- Posting-number: Volume 10, Issue 65
- Archive-name: ptoc/Part01
-
- [ This program translates monolithic Pascal programs into monolithic
- C programs. To compile either the .c or the .p version, you will
- first have to join all the ptc.c.[1-7] or ptc.p.[1-5] parts together
- first. The manpage and ptc.doc will also be usefl. --r$ ]
-
- #! /bin/sh
- # This is a shell archive. Remove anything before this line, then unpack
- # it by saving it into a file and typing "sh file". To overwrite existing
- # files, type "sh file -c". You can also feed this as standard input via
- # unshar, or by typing "sh <file", e.g.. If this archive is complete, you
- # will see the following message at the end:
- # "End of archive 1 (of 12)."
- # Contents: MANIFEST README makefile ptc.c.7 ptc.man
- PATH=/bin:/usr/bin:/usr/ucb ; export PATH
- if test -f 'MANIFEST' -a "${1}" != "-c" ; then
- echo shar: Will not clobber existing file \"'MANIFEST'\"
- else
- echo shar: Extracting \"'MANIFEST'\" \(594 characters\)
- sed "s/^X//" >'MANIFEST' <<'END_OF_FILE'
- X File Name Archive # Description
- X-----------------------------------------------------------
- X MANIFEST 1 This shipping list
- X README 1
- X makefile 1
- X ptc.c.1 3
- X ptc.c.2 4
- X ptc.c.3 2
- X ptc.c.4 6
- X ptc.c.5 7
- X ptc.c.6 8
- X ptc.c.7 1
- X ptc.man 1
- X ptc.p.1 12
- X ptc.p.2 10
- X ptc.p.3 9
- X ptc.p.4 11
- X ptoc.doc 5
- END_OF_FILE
- if test 594 -ne `wc -c <'MANIFEST'`; then
- echo shar: \"'MANIFEST'\" unpacked with wrong size!
- fi
- # end of 'MANIFEST'
- fi
- if test -f 'README' -a "${1}" != "-c" ; then
- echo shar: Will not clobber existing file \"'README'\"
- else
- echo shar: Extracting \"'README'\" \(1473 characters\)
- sed "s/^X//" >'README' <<'END_OF_FILE'
- XSetting up the Pascal to C translator.
- X
- XThe translator is a single huge Pascal program. If you are working on a UNIX
- Xsystem that has a Pascal compiler what you need to do is to unpack and
- Xconcatenate the four parts forming the translator sourcecode, "ptc.p",
- Xunpack the "makefile", say "make ptc" and take a break.
- X
- XIf you are on a non-UNIX system proceed with discretion.
- X
- XIf compilation fails due to the program size you may consider attacking the C
- Xversion, "ptc.c", if this too is too large to compile you may as well give up.
- XIf it fails to compile or run for other reasons you may try to contact me.
- X
- XWhen/if the ptc program is created you may try saying "make tests", this should
- Xnot produce any output at all. If it does it means that ptc obtained from ptc.p
- Xdiffered in behaviour from cptc obtained from ptc.c obtained from ptc.p. In that
- Xcase your Pascal and/or C compilers depart seriously from the ones availible to
- Xthe author, this may imply a bug in ptc.
- X
- XRead the section "Tuning" in the implementation notes and do what you believe
- Xis appropriate for your installation; recompile and install binary and man-page
- Xas necessary.
- X
- XSend vitriolic comments to /dev/null;
- Xchecks, constructive critisism and bug-reports to the address below.
- X
- X
- XSincerely,
- X
- X Per Bergsten
- X
- XEmail: perb%holtec.uucp@chalmers.csnet
- X ... mcvax!enea!chalmers!holtec!perb
- Xaka: bergsten@chalmers
- X
- XSmail: Holistic Technology AB
- X Grona Gatan 59
- X 414 54 Gothenburg
- X Sweden
- X
- XFax: +46 31 247456
- X
- END_OF_FILE
- if test 1473 -ne `wc -c <'README'`; then
- echo shar: \"'README'\" unpacked with wrong size!
- fi
- # end of 'README'
- fi
- if test -f 'makefile' -a "${1}" != "-c" ; then
- echo shar: Will not clobber existing file \"'makefile'\"
- else
- echo shar: Extracting \"'makefile'\" \(974 characters\)
- sed "s/^X//" >'makefile' <<'END_OF_FILE'
- X#
- X# @(#)Makefile 1.5 Date 87/05/09
- X#
- XCFLAGS = -O
- XPFLAGS = -O
- XFILES = makefile ptc.p ptc.c ptc doc.ms doc.out ptc.man man.out
- XPAGELEN = -rP70
- XDEV = /dev/rst8
- XBLK = 126
- X
- X.DEFAULT:
- X $(GET) -p -s SCCS/s.$@ > $@
- X
- X# default version
- XS = p
- Xptc: ptc.$S
- X $Sc -O -o ptc ptc.$S
- X
- X# translated version
- Xcptc: cptc.c
- X cc -O -o cptc cptc.c
- X
- Xcptc.c: ptc.p ptc
- X ptc < ptc.p > cptc.c
- X
- Xtests: test0
- X
- X
- X#
- X# Perform a simple test translating the source with the compiled
- X# translator and the compairing its own source against its
- X# translation of its own source. They should be exactly equal.
- X#
- Xtest0: ptc cptc.c cptc FRC
- X cptc < ptc.p > tmp.c
- X cmp cptc.c tmp.c && rm tmp.c
- X
- X
- XFRC:
- X
- X#
- X# Documentation.
- X#
- Xdoc.out: doc.ms
- X tbl doc.ms | nroff -T$(TERM) $(PAGELEN) -ms - > doc.out
- X
- Xman.out: ptc.man
- X nroff -T$(TERM) $(PAGELEN) -man ptc.man > man.out
- X
- X
- X#
- X# Maintenance
- X#
- Xcleanup:
- X rm -f cptc cptc.c tmp.c out
- X
- Xclean:: cleanup
- X
- X
- Xclobber:: cleanup
- X
- X
- Xtape: $(FILES)
- X tar cvfb $(DEV) $(BLK) $(FILES)
- END_OF_FILE
- if test 974 -ne `wc -c <'makefile'`; then
- echo shar: \"'makefile'\" unpacked with wrong size!
- fi
- # end of 'makefile'
- fi
- if test -f 'ptc.c.7' -a "${1}" != "-c" ; then
- echo shar: Will not clobber existing file \"'ptc.c.7'\"
- else
- echo shar: Extracting \"'ptc.c.7'\" \(28856 characters\)
- sed "s/^X//" >'ptc.c.7' <<'END_OF_FILE'
- X void
- Xdefmach(lo, hi, str)
- X integer lo, hi;
- X machdefstr str;
- X{
- X register toknidx i;
- X toknbuf w;
- X
- X { register int _j, _i = 1 - 1;
- X for (_j = 0; _j < 16; )
- X w.A[_i++] = str.A[_j++];
- X }
- X if (w.A[machdeflen - 1] != space)
- X error(ebadmach);
- X {
- X toknidx B74 = machdeflen - 1,
- X B75 = 1;
- X
- X if (B74 >= B75)
- X for (i = B74; ; i--) {
- X if (w.A[i - 1] != space) {
- X w.A[i + 1 - 1] = null;
- X goto L999;
- X }
- X if (i == B75) break;
- X }
- X }
- X error(ebadmach);
- XL999:
- X if (nmachdefs >= maxmachdefs)
- X error(emanymachs);
- X nmachdefs = nmachdefs + 1;
- X {
- X register struct S193 *W76 = &machdefs.A[nmachdefs - 1];
- X
- X W76->lolim = lo;
- X W76->hilim = hi;
- X W76->typstr = savestr(&w);
- X }
- X}
- X
- X void
- Xinitstrstore()
- X{
- X register strbcnt i;
- X
- X {
- X strbcnt B77 = 1,
- X B78 = maxblkcnt;
- X
- X if (B77 <= B78)
- X for (i = B77; ; i++) {
- X strstor.A[i] = (strblk *)NIL;
- X if (i == B78) break;
- X }
- X }
- X strstor.A[0] = (strblk *)malloc((unsigned)(sizeof(*strstor.A[0])));
- X strstor.A[0]->A[0] = null;
- X strfree = 1;
- X strleft = maxstrblk;
- X}
- X
- X
- X void
- Xinitialize()
- X{
- X register hashtyp s;
- X register pretyps t;
- X register predefs d;
- X
- X lineno = 1;
- X colno = 0;
- X initstrstore();
- X setlst = (struct S61 *)NIL;
- X setcnt = 0;
- X (void)strncpy(hexdig.A, "0123456789ABCDEF", sizeof(hexdig.A));
- X symtab = (struct S60 *)NIL;
- X statlvl = 0;
- X maxlevel = -1;
- X enterscope((declptr)NIL);
- X varno = 0;
- X usenilp = false;
- X usesets = false;
- X useunion = false;
- X usediff = false;
- X usemksub = false;
- X useintr = false;
- X usesge = false;
- X usesle = false;
- X usesne = false;
- X useseq = false;
- X usememb = false;
- X useins = false;
- X usescpy = false;
- X usefopn = false;
- X usescan = false;
- X usegetl = false;
- X usecase = false;
- X usejmps = false;
- X usebool = false;
- X usecomp = false;
- X usemax = false;
- X {
- X hashtyp B79 = 0,
- X B80 = hashmax;
- X
- X if (B79 <= B80)
- X for (s = B79; ; s++) {
- X idtab.A[s] = (struct S59 *)NIL;
- X if (s == B80) break;
- X }
- X }
- X {
- X predefs B81 = dabs,
- X B82 = dztring;
- X
- X if ((int)(B81) <= (int)(B82))
- X for (d = B81; ; d = (predefs)((int)(d)+1)) {
- X deftab.A[(int)(d)] = (struct S61 *)NIL;
- X defnams.A[(int)(d)] = (struct S62 *)NIL;
- X if (d == B82) break;
- X }
- X }
- X defkey(sand, *((keyword *)"and "));
- X defkey(sarray, *((keyword *)"array "));
- X defkey(sbegin, *((keyword *)"begin "));
- X defkey(scase, *((keyword *)"case "));
- X defkey(sconst, *((keyword *)"const "));
- X defkey(sdiv, *((keyword *)"div "));
- X defkey(sdo, *((keyword *)"do "));
- X defkey(sdownto, *((keyword *)"downto "));
- X defkey(selse, *((keyword *)"else "));
- X defkey(send, *((keyword *)"end "));
- X defkey(sextern, *((keyword *)externsym));
- X defkey(sfile, *((keyword *)"file "));
- X defkey(sfor, *((keyword *)"for "));
- X defkey(sforward, *((keyword *)"forward "));
- X defkey(sfunc, *((keyword *)"function "));
- X defkey(sgoto, *((keyword *)"goto "));
- X defkey(sif, *((keyword *)"if "));
- X defkey(sinn, *((keyword *)"in "));
- X defkey(slabel, *((keyword *)"label "));
- X defkey(smod, *((keyword *)"mod "));
- X defkey(snil, *((keyword *)"nil "));
- X defkey(snot, *((keyword *)"not "));
- X defkey(sof, *((keyword *)"of "));
- X defkey(sor, *((keyword *)"or "));
- X defkey(sother, *((keyword *)othersym));
- X defkey(spacked, *((keyword *)"packed "));
- X defkey(sproc, *((keyword *)"procedure "));
- X defkey(spgm, *((keyword *)"program "));
- X defkey(srecord, *((keyword *)"record "));
- X defkey(srepeat, *((keyword *)"repeat "));
- X defkey(sset, *((keyword *)"set "));
- X defkey(sthen, *((keyword *)"then "));
- X defkey(sto, *((keyword *)"to "));
- X defkey(stype, *((keyword *)"type "));
- X defkey(suntil, *((keyword *)"until "));
- X defkey(svar, *((keyword *)"var "));
- X defkey(swhile, *((keyword *)"while "));
- X defkey(swith, *((keyword *)"with "));
- X defkey(seof, *((keyword *)dummysym));
- X cprio.A[(int)(nformat) - (int)(nassign)] = 0;
- X cprio.A[(int)(nrange) - (int)(nassign)] = 0;
- X cprio.A[(int)(nin) - (int)(nassign)] = 0;
- X cprio.A[(int)(nset) - (int)(nassign)] = 0;
- X cprio.A[(int)(nassign) - (int)(nassign)] = 0;
- X cprio.A[(int)(nor) - (int)(nassign)] = 1;
- X cprio.A[(int)(nand) - (int)(nassign)] = 2;
- X cprio.A[(int)(neq) - (int)(nassign)] = 3;
- X cprio.A[(int)(nne) - (int)(nassign)] = 3;
- X cprio.A[(int)(nlt) - (int)(nassign)] = 3;
- X cprio.A[(int)(nle) - (int)(nassign)] = 3;
- X cprio.A[(int)(ngt) - (int)(nassign)] = 3;
- X cprio.A[(int)(nge) - (int)(nassign)] = 3;
- X cprio.A[(int)(nplus) - (int)(nassign)] = 4;
- X cprio.A[(int)(nminus) - (int)(nassign)] = 4;
- X cprio.A[(int)(nmul) - (int)(nassign)] = 5;
- X cprio.A[(int)(ndiv) - (int)(nassign)] = 5;
- X cprio.A[(int)(nmod) - (int)(nassign)] = 5;
- X cprio.A[(int)(nquot) - (int)(nassign)] = 5;
- X cprio.A[(int)(nnot) - (int)(nassign)] = 6;
- X cprio.A[(int)(numinus) - (int)(nassign)] = 6;
- X cprio.A[(int)(nuplus) - (int)(nassign)] = 7;
- X cprio.A[(int)(nindex) - (int)(nassign)] = 7;
- X cprio.A[(int)(nselect) - (int)(nassign)] = 7;
- X cprio.A[(int)(nderef) - (int)(nassign)] = 7;
- X cprio.A[(int)(ncall) - (int)(nassign)] = 7;
- X cprio.A[(int)(nid) - (int)(nassign)] = 7;
- X cprio.A[(int)(nchar) - (int)(nassign)] = 7;
- X cprio.A[(int)(ninteger) - (int)(nassign)] = 7;
- X cprio.A[(int)(nreal) - (int)(nassign)] = 7;
- X cprio.A[(int)(nstring) - (int)(nassign)] = 7;
- X cprio.A[(int)(nnil) - (int)(nassign)] = 7;
- X pprio.A[(int)(nassign) - (int)(nassign)] = 0;
- X pprio.A[(int)(nformat) - (int)(nassign)] = 0;
- X pprio.A[(int)(nrange) - (int)(nassign)] = 1;
- X pprio.A[(int)(nin) - (int)(nassign)] = 1;
- X pprio.A[(int)(neq) - (int)(nassign)] = 1;
- X pprio.A[(int)(nne) - (int)(nassign)] = 1;
- X pprio.A[(int)(nlt) - (int)(nassign)] = 1;
- X pprio.A[(int)(nle) - (int)(nassign)] = 1;
- X pprio.A[(int)(ngt) - (int)(nassign)] = 1;
- X pprio.A[(int)(nge) - (int)(nassign)] = 1;
- X pprio.A[(int)(nor) - (int)(nassign)] = 2;
- X pprio.A[(int)(nplus) - (int)(nassign)] = 2;
- X pprio.A[(int)(nminus) - (int)(nassign)] = 2;
- X pprio.A[(int)(nand) - (int)(nassign)] = 3;
- X pprio.A[(int)(nmul) - (int)(nassign)] = 3;
- X pprio.A[(int)(ndiv) - (int)(nassign)] = 3;
- X pprio.A[(int)(nmod) - (int)(nassign)] = 3;
- X pprio.A[(int)(nquot) - (int)(nassign)] = 3;
- X pprio.A[(int)(nnot) - (int)(nassign)] = 4;
- X pprio.A[(int)(numinus) - (int)(nassign)] = 4;
- X pprio.A[(int)(nuplus) - (int)(nassign)] = 5;
- X pprio.A[(int)(nset) - (int)(nassign)] = 6;
- X pprio.A[(int)(nindex) - (int)(nassign)] = 6;
- X pprio.A[(int)(nselect) - (int)(nassign)] = 6;
- X pprio.A[(int)(nderef) - (int)(nassign)] = 6;
- X pprio.A[(int)(ncall) - (int)(nassign)] = 6;
- X pprio.A[(int)(nid) - (int)(nassign)] = 6;
- X pprio.A[(int)(nchar) - (int)(nassign)] = 6;
- X pprio.A[(int)(ninteger) - (int)(nassign)] = 6;
- X pprio.A[(int)(nreal) - (int)(nassign)] = 6;
- X pprio.A[(int)(nstring) - (int)(nassign)] = 6;
- X pprio.A[(int)(nnil) - (int)(nassign)] = 6;
- X defname(cabort, *((keyword *)"abort "));
- X defname(cbreak, *((keyword *)"break "));
- X defname(ccontinue, *((keyword *)"continue "));
- X defname(cdefine, *((keyword *)"define "));
- X defname(cdefault, *((keyword *)"default "));
- X defname(cdouble, *((keyword *)"double "));
- X defname(cedata, *((keyword *)"edata "));
- X defname(cenum, *((keyword *)"enum "));
- X defname(cetext, *((keyword *)"etext "));
- X defname(cextern, *((keyword *)"extern "));
- X defname(cfclose, *((keyword *)"fclose "));
- X defname(cfflush, *((keyword *)"fflush "));
- X defname(cfgetc, *((keyword *)"fgetc "));
- X defname(cfloat, *((keyword *)"float "));
- X defname(cfloor, *((keyword *)"floor "));
- X defname(cfprintf, *((keyword *)"fprintf "));
- X defname(cfputc, *((keyword *)"fputc "));
- X defname(cfread, *((keyword *)"fread "));
- X defname(cfscanf, *((keyword *)"fscanf "));
- X defname(cfwrite, *((keyword *)"fwrite "));
- X defname(cgetc, *((keyword *)"getc "));
- X defname(cgetpid, *((keyword *)"getpid "));
- X defname(cint, *((keyword *)"int "));
- X defname(cinclude, *((keyword *)"include "));
- X defname(clong, *((keyword *)"long "));
- X defname(clog, *((keyword *)"log "));
- X defname(cmain, *((keyword *)"main "));
- X defname(cmalloc, *((keyword *)"malloc "));
- X defname(cprintf, *((keyword *)"printf "));
- X defname(cpower, *((keyword *)"pow "));
- X defname(cputc, *((keyword *)"putc "));
- X defname(cread, *((keyword *)"read "));
- X defname(creturn, *((keyword *)"return "));
- X defname(cregister, *((keyword *)"register "));
- X defname(crewind, *((keyword *)"rewind "));
- X defname(cscanf, *((keyword *)"scanf "));
- X defname(csetbits, *((keyword *)"setbits "));
- X defname(csetword, *((keyword *)"setword "));
- X defname(csetptr, *((keyword *)"setptr "));
- X defname(cshort, *((keyword *)"short "));
- X defname(csigned, *((keyword *)"signed "));
- X defname(csizeof, *((keyword *)"sizeof "));
- X defname(csprintf, *((keyword *)"sprintf "));
- X defname(cstatic, *((keyword *)"static "));
- X defname(cstdin, *((keyword *)"stdin "));
- X defname(cstdout, *((keyword *)"stdout "));
- X defname(cstderr, *((keyword *)"stderr "));
- X defname(cstrncmp, *((keyword *)"strncmp "));
- X defname(cstrncpy, *((keyword *)"strncpy "));
- X defname(cstruct, *((keyword *)"struct "));
- X defname(cswitch, *((keyword *)"switch "));
- X defname(ctypedef, *((keyword *)"typedef "));
- X defname(cundef, *((keyword *)"undef "));
- X defname(cungetc, *((keyword *)"ungetc "));
- X defname(cunion, *((keyword *)"union "));
- X defname(cunlink, *((keyword *)"unlink "));
- X defname(cunsigned, *((keyword *)"unsigned "));
- X defname(cwrite, *((keyword *)"write "));
- X defid(nfunc, dabs, *((keyword *)"abs "));
- X defid(nfunc, darctan, *((keyword *)"arctan "));
- X defid(nvar, dargc, *((keyword *)"argc "));
- X defid(nproc, dargv, *((keyword *)"argv "));
- X defid(nscalar, dboolean, *((keyword *)"boolean "));
- X defid(ntype, dchar, *((keyword *)"char "));
- X defid(nfunc, dchr, *((keyword *)"chr "));
- X defid(nproc, dclose, *((keyword *)"close "));
- X defid(nfunc, dcos, *((keyword *)"cos "));
- X defid(nproc, ddispose, *((keyword *)"dispose "));
- X defid(nid, dfalse, *((keyword *)"false "));
- X defid(nfunc, deof, *((keyword *)"eof "));
- X defid(nfunc, deoln, *((keyword *)"eoln "));
- X defid(nproc, dexit, *((keyword *)"exit "));
- X defid(nfunc, dexp, *((keyword *)"exp "));
- X defid(nproc, dflush, *((keyword *)"flush "));
- X defid(nproc, dget, *((keyword *)"get "));
- X defid(nproc, dhalt, *((keyword *)"halt "));
- X defid(nvar, dinput, *((keyword *)"input "));
- X defid(ntype, dinteger, *((keyword *)"integer "));
- X defid(nfunc, dln, *((keyword *)"ln "));
- X defid(nconst, dmaxint, *((keyword *)"maxint "));
- X defid(nproc, dmessage, *((keyword *)"message "));
- X defid(nproc, dnew, *((keyword *)"new "));
- X defid(nfunc, dodd, *((keyword *)"odd "));
- X defid(nfunc, dord, *((keyword *)"ord "));
- X defid(nvar, doutput, *((keyword *)"output "));
- X defid(nproc, dpack, *((keyword *)"pack "));
- X defid(nproc, dpage, *((keyword *)"page "));
- X defid(nfunc, dpred, *((keyword *)"pred "));
- X defid(nproc, dput, *((keyword *)"put "));
- X defid(nproc, dread, *((keyword *)"read "));
- X defid(nproc, dreadln, *((keyword *)"readln "));
- X defid(ntype, dreal, *((keyword *)"real "));
- X defid(nproc, dreset, *((keyword *)"reset "));
- X defid(nproc, drewrite, *((keyword *)"rewrite "));
- X defid(nfunc, dround, *((keyword *)"round "));
- X defid(nfunc, dsin, *((keyword *)"sin "));
- X defid(nfunc, dsqr, *((keyword *)"sqr "));
- X defid(nfunc, dsqrt, *((keyword *)"sqrt "));
- X defid(nfunc, dsucc, *((keyword *)"succ "));
- X defid(ntype, dtext, *((keyword *)"text "));
- X defid(nid, dtrue, *((keyword *)"true "));
- X defid(nfunc, dtrunc, *((keyword *)"trunc "));
- X defid(nfunc, dtan, *((keyword *)"tan "));
- X defid(nproc, dunpack, *((keyword *)"unpack "));
- X defid(nproc, dwrite, *((keyword *)"write "));
- X defid(nproc, dwriteln, *((keyword *)"writeln "));
- X defid(nfield, dzinit, *((keyword *)"$nit "));
- X defid(ntype, dztring, *((keyword *)"$ztring "));
- X deftab.A[(int)(dboolean)]->U.V14.tbind->U.V17.tscalid = deftab.A[(int)(dfalse)];
- X deftab.A[(int)(dfalse)]->tnext = deftab.A[(int)(dtrue)];
- X currsym.st = sinteger;
- X currsym.U.V3.vint = maxint;
- X deftab.A[(int)(dmaxint)]->U.V14.tbind = mklit();
- X deftab.A[(int)(dargc)]->U.V14.tbind = deftab.A[(int)(dinteger)]->U.V14.tbind;
- X deftab.A[(int)(dinput)]->U.V14.tbind = deftab.A[(int)(dtext)]->U.V14.tbind;
- X deftab.A[(int)(doutput)]->U.V14.tbind = deftab.A[(int)(dtext)]->U.V14.tbind;
- X {
- X pretyps B83 = tnone,
- X B84 = terror;
- X
- X if ((int)(B83) <= (int)(B84))
- X for (t = B83; ; t = (pretyps)((int)(t)+1)) {
- X switch (t) {
- X case tboolean:
- X typnods.A[(int)(t)] = deftab.A[(int)(dboolean)];
- X break ;
- X case tchar:
- X typnods.A[(int)(t)] = deftab.A[(int)(dchar)]->U.V14.tbind;
- X break ;
- X case tinteger:
- X typnods.A[(int)(t)] = deftab.A[(int)(dinteger)]->U.V14.tbind;
- X break ;
- X case treal:
- X typnods.A[(int)(t)] = deftab.A[(int)(dreal)]->U.V14.tbind;
- X break ;
- X case ttext:
- X typnods.A[(int)(t)] = deftab.A[(int)(dtext)]->U.V14.tbind;
- X break ;
- X case tstring:
- X typnods.A[(int)(t)] = deftab.A[(int)(dztring)]->U.V14.tbind;
- X break ;
- X case tnil: case tset: case tpoly: case tnone:
- X typnods.A[(int)(t)] = mknode(npredef);
- X break ;
- X case terror:
- X break ;
- X default:
- X Caseerror(Line);
- X }
- X if (Member((unsigned)(t), Conset[163]))
- X typnods.A[(int)(t)]->U.V12.tobtyp = t;
- X if (t == B84) break;
- X }
- X }
- X fixinit(defnams.A[(int)(dzinit)]->U.V6.lid->istr);
- X deftab.A[(int)(dzinit)]->U.V14.tbind = deftab.A[(int)(dinteger)]->U.V14.tbind;
- X {
- X predefs B85 = dabs,
- X B86 = dztring;
- X
- X if ((int)(B85) <= (int)(B86))
- X for (d = B85; ; d = (predefs)((int)(d)+1)) {
- X linkup((treeptr)NIL, deftab.A[(int)(d)]);
- X if (d == B86) break;
- X }
- X }
- X deftab.A[(int)(dchr)]->U.V13.tfuntyp = typnods.A[(int)(tchar)];
- X deftab.A[(int)(deof)]->U.V13.tfuntyp = typnods.A[(int)(tboolean)];
- X deftab.A[(int)(deoln)]->U.V13.tfuntyp = typnods.A[(int)(tboolean)];
- X deftab.A[(int)(dodd)]->U.V13.tfuntyp = typnods.A[(int)(tboolean)];
- X deftab.A[(int)(dord)]->U.V13.tfuntyp = typnods.A[(int)(tinteger)];
- X deftab.A[(int)(dround)]->U.V13.tfuntyp = typnods.A[(int)(tinteger)];
- X deftab.A[(int)(dtrunc)]->U.V13.tfuntyp = typnods.A[(int)(tinteger)];
- X deftab.A[(int)(darctan)]->U.V13.tfuntyp = typnods.A[(int)(treal)];
- X deftab.A[(int)(dcos)]->U.V13.tfuntyp = typnods.A[(int)(treal)];
- X deftab.A[(int)(dsin)]->U.V13.tfuntyp = typnods.A[(int)(treal)];
- X deftab.A[(int)(dtan)]->U.V13.tfuntyp = typnods.A[(int)(treal)];
- X deftab.A[(int)(dsqrt)]->U.V13.tfuntyp = typnods.A[(int)(treal)];
- X deftab.A[(int)(dexp)]->U.V13.tfuntyp = typnods.A[(int)(treal)];
- X deftab.A[(int)(dln)]->U.V13.tfuntyp = typnods.A[(int)(treal)];
- X deftab.A[(int)(dsqr)]->U.V13.tfuntyp = typnods.A[(int)(tpoly)];
- X deftab.A[(int)(dabs)]->U.V13.tfuntyp = typnods.A[(int)(tpoly)];
- X deftab.A[(int)(dpred)]->U.V13.tfuntyp = typnods.A[(int)(tpoly)];
- X deftab.A[(int)(dsucc)]->U.V13.tfuntyp = typnods.A[(int)(tpoly)];
- X deftab.A[(int)(dargv)]->U.V13.tfuntyp = typnods.A[(int)(tnone)];
- X deftab.A[(int)(ddispose)]->U.V13.tfuntyp = typnods.A[(int)(tnone)];
- X deftab.A[(int)(dexit)]->U.V13.tfuntyp = typnods.A[(int)(tnone)];
- X deftab.A[(int)(dget)]->U.V13.tfuntyp = typnods.A[(int)(tnone)];
- X deftab.A[(int)(dhalt)]->U.V13.tfuntyp = typnods.A[(int)(tnone)];
- X deftab.A[(int)(dnew)]->U.V13.tfuntyp = typnods.A[(int)(tnone)];
- X deftab.A[(int)(dpack)]->U.V13.tfuntyp = typnods.A[(int)(tnone)];
- X deftab.A[(int)(dput)]->U.V13.tfuntyp = typnods.A[(int)(tnone)];
- X deftab.A[(int)(dread)]->U.V13.tfuntyp = typnods.A[(int)(tnone)];
- X deftab.A[(int)(dreadln)]->U.V13.tfuntyp = typnods.A[(int)(tnone)];
- X deftab.A[(int)(dreset)]->U.V13.tfuntyp = typnods.A[(int)(tnone)];
- X deftab.A[(int)(drewrite)]->U.V13.tfuntyp = typnods.A[(int)(tnone)];
- X deftab.A[(int)(dwrite)]->U.V13.tfuntyp = typnods.A[(int)(tnone)];
- X deftab.A[(int)(dwriteln)]->U.V13.tfuntyp = typnods.A[(int)(tnone)];
- X deftab.A[(int)(dmessage)]->U.V13.tfuntyp = typnods.A[(int)(tnone)];
- X deftab.A[(int)(dunpack)]->U.V13.tfuntyp = typnods.A[(int)(tnone)];
- X nmachdefs = 0;
- X defmach(0, 255, *((machdefstr *)"unsigned char "));
- X defmach(-128, 127, *((machdefstr *)"char "));
- X defmach(0, 65535, *((machdefstr *)"unsigned short "));
- X defmach(-32768, 32767, *((machdefstr *)"short "));
- X defmach(-2147483647, 2147483647, *((machdefstr *)"long "));
- X}
- X
- Xextern void exit();
- X
- X void
- Xerror(m)
- X errors m;
- X{
- X prtmsg(m);
- X exit(1);
- X longjmp(J[0].jb, 9999);
- X}
- X
- X void
- Xfatal(m)
- X errors m;
- X{
- X prtmsg(m);
- X abort();
- X}
- X
- X/*
- X** Start of program code
- X*/
- Xmain()
- X{
- X if (setjmp(J[0].jb))
- X goto L9999;
- X initialize();
- X if (echo)
- X (void)fprintf(output.fp, "# ifdef PASCAL\n"), Putl(output, 1);
- X parse();
- X if (echo)
- X (void)fprintf(output.fp, "# else\n"), Putl(output, 1);
- X lineno = 0;
- X lastline = 0;
- X transform();
- X emit();
- X if (echo)
- X (void)fprintf(output.fp, "# endif\n"), Putl(output, 1);
- XL9999:
- X ;
- X exit(0);
- X}
- X/*
- X** End of program code
- X*/
- Xstatic setword Q0[] = {
- X 1,
- X 0x03FD
- X};
- Xstatic setword Q1[] = {
- X 1,
- X 0x004C
- X};
- Xstatic setword Q2[] = {
- X 1,
- X 0x0000
- X};
- Xstatic setword Q3[] = {
- X 2,
- X 0x000E, 0x5210
- X};
- Xstatic setword Q4[] = {
- X 2,
- X 0x000E, 0x1210
- X};
- Xstatic setword Q5[] = {
- X 1,
- X 0x0C00
- X};
- Xstatic setword Q6[] = {
- X 1,
- X 0x000C
- X};
- Xstatic setword Q7[] = {
- X 2,
- X 0x000E, 0x0210
- X};
- Xstatic setword Q8[] = {
- X 3,
- X 0x0000, 0x0000, 0x0060
- X};
- Xstatic setword Q9[] = {
- X 4,
- X 0x0002, 0x0000, 0x0064, 0x0800
- X};
- Xstatic setword Q10[] = {
- X 1,
- X 0x0C00
- X};
- Xstatic setword Q11[] = {
- X 1,
- X 0x000C
- X};
- Xstatic setword Q12[] = {
- X 4,
- X 0x0000, 0x0000, 0x4FF0, 0x0008
- X};
- Xstatic setword Q13[] = {
- X 3,
- X 0x0000, 0x0000, 0x0780
- X};
- Xstatic setword Q14[] = {
- X 3,
- X 0x0000, 0x0000, 0x0780
- X};
- Xstatic setword Q15[] = {
- X 5,
- X 0x0000, 0x0001, 0x0000, 0x0000, 0x0001
- X};
- Xstatic setword Q16[] = {
- X 3,
- X 0x0000, 0x0000, 0x07E0
- X};
- Xstatic setword Q17[] = {
- X 3,
- X 0x0000, 0x0000, 0xB000
- X};
- Xstatic setword Q18[] = {
- X 4,
- X 0x0000, 0x0008, 0x0000, 0x0040
- X};
- Xstatic setword Q19[] = {
- X 3,
- X 0x0000, 0x0000, 0xB560
- X};
- Xstatic setword Q20[] = {
- X 4,
- X 0x0000, 0x0000, 0x4FF0, 0x0008
- X};
- Xstatic setword Q21[] = {
- X 1,
- X 0x0C00
- X};
- Xstatic setword Q22[] = {
- X 4,
- X 0x0000, 0x0000, 0x0000, 0x1700
- X};
- Xstatic setword Q23[] = {
- X 2,
- X 0x0000, 0x0003
- X};
- Xstatic setword Q24[] = {
- X 4,
- X 0x0000, 0x0000, 0x0000, 0x1700
- X};
- Xstatic setword Q25[] = {
- X 3,
- X 0x0000, 0x0040, 0x4000
- X};
- Xstatic setword Q26[] = {
- X 1,
- X 0x000E
- X};
- Xstatic setword Q27[] = {
- X 1,
- X 0x000E
- X};
- Xstatic setword Q28[] = {
- X 1,
- X 0x000C
- X};
- Xstatic setword Q29[] = {
- X 1,
- X 0x000E
- X};
- Xstatic setword Q30[] = {
- X 1,
- X 0x000E
- X};
- Xstatic setword Q31[] = {
- X 2,
- X 0x8000, 0x0045
- X};
- Xstatic setword Q32[] = {
- X 1,
- X 0x000E
- X};
- Xstatic setword Q33[] = {
- X 1,
- X 0x000E
- X};
- Xstatic setword Q34[] = {
- X 3,
- X 0x0000, 0x0000, 0x0040
- X};
- Xstatic setword Q35[] = {
- X 3,
- X 0x4010, 0x0C00, 0x000A
- X};
- Xstatic setword Q36[] = {
- X 5,
- X 0x0300, 0x0000, 0x0004, 0x2000, 0x0001
- X};
- Xstatic setword Q37[] = {
- X 4,
- X 0x0300, 0x0000, 0x0004, 0x2000
- X};
- Xstatic setword Q38[] = {
- X 3,
- X 0x0000, 0x0000, 0x0080
- X};
- Xstatic setword Q39[] = {
- X 4,
- X 0x0040, 0x0000, 0x0000, 0x0800
- X};
- Xstatic setword Q40[] = {
- X 1,
- X 0x0040
- X};
- Xstatic setword Q41[] = {
- X 3,
- X 0x0080, 0x0000, 0x0001
- X};
- Xstatic setword Q42[] = {
- X 4,
- X 0x0000, 0x0000, 0x0000, 0x4000
- X};
- Xstatic setword Q43[] = {
- X 3,
- X 0x0000, 0x0000, 0x0800
- X};
- Xstatic setword Q44[] = {
- X 4,
- X 0x0000, 0x0000, 0x0004, 0x2000
- X};
- Xstatic setword Q45[] = {
- X 1,
- X 0x0040
- X};
- Xstatic setword Q46[] = {
- X 2,
- X 0x0000, 0x8000
- X};
- Xstatic setword Q47[] = {
- X 4,
- X 0x0300, 0x0000, 0x0004, 0x2000
- X};
- Xstatic setword Q48[] = {
- X 4,
- X 0x930C, 0x2001, 0x0834, 0x2000
- X};
- Xstatic setword Q49[] = {
- X 4,
- X 0x930C, 0x2001, 0x0834, 0x3000
- X};
- Xstatic setword Q50[] = {
- X 4,
- X 0x0000, 0x0000, 0x0000, 0x1800
- X};
- Xstatic setword Q51[] = {
- X 2,
- X 0x0200, 0x0100
- X};
- Xstatic setword Q52[] = {
- X 3,
- X 0x0200, 0x0100, 0x3C80
- X};
- Xstatic setword Q53[] = {
- X 2,
- X 0x0000, 0x0040
- X};
- Xstatic setword Q54[] = {
- X 4,
- X 0x0000, 0x0000, 0x4FF0, 0x0008
- X};
- Xstatic setword Q55[] = {
- X 4,
- X 0x03E1, 0x80CA, 0xF005, 0xBFFE
- X};
- Xstatic setword Q56[] = {
- X 4,
- X 0x0000, 0x0030, 0x3F80, 0x001A
- X};
- Xstatic setword Q57[] = {
- X 4,
- X 0x0000, 0x0000, 0x0000, 0x0478
- X};
- Xstatic setword Q58[] = {
- X 4,
- X 0x0000, 0x0000, 0x0000, 0x0478
- X};
- Xstatic setword Q59[] = {
- X 1,
- X 0x0C0C
- X};
- Xstatic setword Q60[] = {
- X 3,
- X 0x0000, 0x0000, 0x0800
- X};
- Xstatic setword Q61[] = {
- X 5,
- X 0x0000, 0x0000, 0x0000, 0x000B, 0x0001
- X};
- Xstatic setword Q62[] = {
- X 5,
- X 0x03E1, 0x80CA, 0xF005, 0xFFFF, 0x0001
- X};
- Xstatic setword Q63[] = {
- X 4,
- X 0x930C, 0x2001, 0x0834, 0x2000
- X};
- Xstatic setword Q64[] = {
- X 4,
- X 0x0000, 0x0000, 0x0000, 0x1000
- X};
- Xstatic setword Q65[] = {
- X 4,
- X 0x930C, 0x2001, 0x08B4, 0x2000
- X};
- Xstatic setword Q66[] = {
- X 4,
- X 0x0000, 0x0000, 0x0000, 0x2004
- X};
- Xstatic setword Q67[] = {
- X 3,
- X 0x0000, 0x0000, 0x0800
- X};
- Xstatic setword Q68[] = {
- X 4,
- X 0x0000, 0x0000, 0x0000, 0x1000
- X};
- Xstatic setword Q69[] = {
- X 4,
- X 0x0000, 0x0000, 0x0000, 0x1002
- X};
- Xstatic setword Q70[] = {
- X 4,
- X 0x0000, 0x0000, 0x0000, 0x2004
- X};
- Xstatic setword Q71[] = {
- X 4,
- X 0x0000, 0x0000, 0x0000, 0x2006
- X};
- Xstatic setword Q72[] = {
- X 4,
- X 0x0000, 0x0000, 0x0000, 0x2004
- X};
- Xstatic setword Q73[] = {
- X 3,
- X 0x0002, 0x0000, 0x0800
- X};
- Xstatic setword Q74[] = {
- X 3,
- X 0x0000, 0x0000, 0x0800
- X};
- Xstatic setword Q75[] = {
- X 4,
- X 0x0000, 0x0000, 0x0000, 0x1000
- X};
- Xstatic setword Q76[] = {
- X 3,
- X 0x0000, 0x0000, 0x0800
- X};
- Xstatic setword Q77[] = {
- X 3,
- X 0x4000, 0x0400, 0x0808
- X};
- Xstatic setword Q78[] = {
- X 3,
- X 0x0002, 0x0000, 0x0800
- X};
- Xstatic setword Q79[] = {
- X 2,
- X 0x0000, 0x0040
- X};
- Xstatic setword Q80[] = {
- X 4,
- X 0x0000, 0x0000, 0x0000, 0x2010
- X};
- Xstatic setword Q81[] = {
- X 3,
- X 0x0000, 0x0000, 0x0800
- X};
- Xstatic setword Q82[] = {
- X 4,
- X 0x0000, 0x0000, 0x0000, 0x2010
- X};
- Xstatic setword Q83[] = {
- X 3,
- X 0x0000, 0x0000, 0x0800
- X};
- Xstatic setword Q84[] = {
- X 4,
- X 0x0000, 0x0000, 0x0000, 0x0008
- X};
- Xstatic setword Q85[] = {
- X 4,
- X 0x0000, 0x0000, 0x0000, 0x1000
- X};
- Xstatic setword Q86[] = {
- X 3,
- X 0x0000, 0x0000, 0x0800
- X};
- Xstatic setword Q87[] = {
- X 4,
- X 0x0000, 0x0000, 0x0000, 0x8000
- X};
- Xstatic setword Q88[] = {
- X 3,
- X 0x0000, 0x0000, 0x0800
- X};
- Xstatic setword Q89[] = {
- X 3,
- X 0x4004, 0x0400, 0x0040
- X};
- Xstatic setword Q90[] = {
- X 4,
- X 0x0000, 0x0000, 0x0000, 0x2000
- X};
- Xstatic setword Q91[] = {
- X 1,
- X 0x2400
- X};
- Xstatic setword Q92[] = {
- X 3,
- X 0x4014, 0x0404, 0x000A
- X};
- Xstatic setword Q93[] = {
- X 4,
- X 0x0000, 0x0000, 0x0000, 0x2000
- X};
- Xstatic setword Q94[] = {
- X 3,
- X 0x6414, 0x0404, 0x000A
- X};
- Xstatic setword Q95[] = {
- X 4,
- X 0x0000, 0x0000, 0x0000, 0x2000
- X};
- Xstatic setword Q96[] = {
- X 3,
- X 0x0000, 0x0000, 0x0800
- X};
- Xstatic setword Q97[] = {
- X 3,
- X 0x0000, 0x0000, 0x0800
- X};
- Xstatic setword Q98[] = {
- X 3,
- X 0x4004, 0x0400, 0x0840
- X};
- Xstatic setword Q99[] = {
- X 4,
- X 0x0000, 0x0000, 0x0000, 0x1800
- X};
- Xstatic setword Q100[] = {
- X 3,
- X 0x0000, 0x0000, 0x0800
- X};
- Xstatic setword Q101[] = {
- X 4,
- X 0x0000, 0x0000, 0x0000, 0x1800
- X};
- Xstatic setword Q102[] = {
- X 3,
- X 0x0000, 0x0000, 0x0800
- X};
- Xstatic setword Q103[] = {
- X 3,
- X 0x4004, 0x0400, 0x0848
- X};
- Xstatic setword Q104[] = {
- X 4,
- X 0x0000, 0x0000, 0x0000, 0x0020
- X};
- Xstatic setword Q105[] = {
- X 3,
- X 0x0000, 0x0000, 0x0800
- X};
- Xstatic setword Q106[] = {
- X 2,
- X 0x0000, 0x0040
- X};
- Xstatic setword Q107[] = {
- X 2,
- X 0x0000, 0x0040
- X};
- Xstatic setword Q108[] = {
- X 4,
- X 0x0000, 0x0000, 0x0000, 0x0010
- X};
- Xstatic setword Q109[] = {
- X 4,
- X 0x0000, 0x0000, 0x0000, 0x0008
- X};
- Xstatic setword Q110[] = {
- X 4,
- X 0x0200, 0x0000, 0x0000, 0x2004
- X};
- Xstatic setword Q111[] = {
- X 3,
- X 0x0000, 0x0000, 0x0800
- X};
- Xstatic setword Q112[] = {
- X 4,
- X 0x0000, 0x0000, 0x0000, 0x0004
- X};
- Xstatic setword Q113[] = {
- X 3,
- X 0x0000, 0x0000, 0x0800
- X};
- Xstatic setword Q114[] = {
- X 3,
- X 0x0000, 0x0000, 0x3C80
- X};
- Xstatic setword Q115[] = {
- X 4,
- X 0x0000, 0x0000, 0x0000, 0x8000
- X};
- Xstatic setword Q116[] = {
- X 4,
- X 0x0000, 0x0000, 0x0000, 0x8000
- X};
- Xstatic setword Q117[] = {
- X 4,
- X 0x0200, 0x0000, 0x0000, 0x2814
- X};
- Xstatic setword Q118[] = {
- X 2,
- X 0x0802, 0x5000
- X};
- Xstatic setword Q119[] = {
- X 4,
- X 0x0802, 0x5200, 0x3C80, 0x0003
- X};
- Xstatic setword Q120[] = {
- X 4,
- X 0x0200, 0x0000, 0x0000, 0x2004
- X};
- Xstatic setword Q121[] = {
- X 4,
- X 0x0000, 0x0000, 0x0000, 0x0002
- X};
- Xstatic setword Q122[] = {
- X 4,
- X 0x0000, 0x0000, 0x0000, 0x1800
- X};
- Xstatic setword Q123[] = {
- X 3,
- X 0x0000, 0x0000, 0x3C80
- X};
- Xstatic setword Q124[] = {
- X 2,
- X 0x0000, 0x0040
- X};
- Xstatic setword Q125[] = {
- X 3,
- X 0x0000, 0x0000, 0x0800
- X};
- Xstatic setword Q126[] = {
- X 4,
- X 0x0000, 0x0040, 0x0000, 0x1000
- X};
- Xstatic setword Q127[] = {
- X 3,
- X 0x0000, 0x0000, 0x0800
- X};
- Xstatic setword Q128[] = {
- X 3,
- X 0x0008, 0x0000, 0x0800
- X};
- Xstatic setword Q129[] = {
- X 4,
- X 0x0000, 0x0000, 0x0000, 0x1000
- X};
- Xstatic setword Q130[] = {
- X 3,
- X 0x0008, 0x0000, 0x0800
- X};
- Xstatic setword Q131[] = {
- X 3,
- X 0x0000, 0x0000, 0x0880
- X};
- Xstatic setword Q132[] = {
- X 3,
- X 0x0000, 0x0000, 0x0980
- X};
- Xstatic setword Q133[] = {
- X 3,
- X 0x0000, 0x0000, 0x3000
- X};
- Xstatic setword Q134[] = {
- X 3,
- X 0x4004, 0x0400, 0x084A
- X};
- Xstatic setword Q135[] = {
- X 4,
- X 0x0000, 0x0000, 0x0000, 0x2000
- X};
- Xstatic setword Q136[] = {
- X 3,
- X 0x0000, 0x0000, 0x3F80
- X};
- Xstatic setword Q137[] = {
- X 4,
- X 0x0000, 0x0000, 0x0000, 0x0020
- X};
- Xstatic setword Q138[] = {
- X 3,
- X 0x0000, 0x0000, 0x0800
- X};
- Xstatic setword Q139[] = {
- X 4,
- X 0x0000, 0x0000, 0x0000, 0x1824
- X};
- Xstatic setword Q140[] = {
- X 3,
- X 0x0000, 0x0000, 0x0800
- X};
- Xstatic setword Q141[] = {
- X 4,
- X 0x0000, 0x0000, 0x0000, 0x1824
- X};
- Xstatic setword Q142[] = {
- X 3,
- X 0x4014, 0x0400, 0x000A
- X};
- Xstatic setword Q143[] = {
- X 4,
- X 0x0000, 0x0000, 0x0000, 0x2800
- X};
- Xstatic setword Q144[] = {
- X 3,
- X 0x0000, 0x0000, 0x0080
- X};
- Xstatic setword Q145[] = {
- X 4,
- X 0x0000, 0x0000, 0x0000, 0x2000
- X};
- Xstatic setword Q146[] = {
- X 5,
- X 0x0000, 0x0000, 0x0000, 0x0000, 0x0001
- X};
- Xstatic setword Q147[] = {
- X 3,
- X 0x4014, 0x0404, 0x000A
- X};
- Xstatic setword Q148[] = {
- X 4,
- X 0x0000, 0x0000, 0x0000, 0x2000
- X};
- Xstatic setword Q149[] = {
- X 3,
- X 0x0000, 0x0000, 0x0800
- X};
- Xstatic setword Q150[] = {
- X 4,
- X 0x0000, 0x0000, 0x0000, 0x2002
- X};
- Xstatic setword Q151[] = {
- X 3,
- X 0x0000, 0x0000, 0x0800
- X};
- Xstatic setword Q152[] = {
- X 4,
- X 0x0000, 0x0000, 0x0000, 0x0804
- X};
- Xstatic setword Q153[] = {
- X 3,
- X 0x0000, 0x0000, 0x0800
- X};
- Xstatic setword Q154[] = {
- X 4,
- X 0x0000, 0x0000, 0x0000, 0x0804
- X};
- Xstatic setword Q155[] = {
- X 3,
- X 0x0000, 0x0000, 0x0800
- X};
- Xstatic setword Q156[] = {
- X 4,
- X 0x0000, 0x0000, 0x0000, 0x0804
- X};
- Xstatic setword Q157[] = {
- X 3,
- X 0x0004, 0x0000, 0x0040
- X};
- Xstatic setword Q158[] = {
- X 1,
- X 0x0018
- X};
- Xstatic setword Q159[] = {
- X 1,
- X 0x00C0
- X};
- Xstatic setword Q160[] = {
- X 1,
- X 0x001A
- X};
- Xstatic setword Q161[] = {
- X 1,
- X 0x001E
- X};
- Xstatic setword Q162[] = {
- X 1,
- X 0x001F
- X};
- Xstatic setword Q163[] = {
- X 1,
- X 0x1FE7
- X};
- Xstatic setword *Conset[] = {
- X Q163, Q162, Q161,
- X Q160, Q159, Q158, Q157, Q156, Q155,
- X Q154, Q153, Q152, Q151, Q150, Q149,
- X Q148, Q147, Q146, Q145, Q144, Q143,
- X Q142, Q141, Q140, Q139, Q138, Q137,
- X Q136, Q135, Q134, Q133, Q132, Q131,
- X Q130, Q129, Q128, Q127, Q126, Q125,
- X Q124, Q123, Q122, Q121, Q120, Q119,
- X Q118, Q117, Q116, Q115, Q114, Q113,
- X Q112, Q111, Q110, Q109, Q108, Q107,
- X Q106, Q105, Q104, Q103, Q102, Q101,
- X Q100, Q99, Q98, Q97, Q96, Q95,
- X Q94, Q93, Q92, Q91, Q90, Q89,
- X Q88, Q87, Q86, Q85, Q84, Q83,
- X Q82, Q81, Q80, Q79, Q78, Q77,
- X Q76, Q75, Q74, Q73, Q72, Q71,
- X Q70, Q69, Q68, Q67, Q66, Q65,
- X Q64, Q63, Q62, Q61, Q60, Q59,
- X Q58, Q57, Q56, Q55, Q54, Q53,
- X Q52, Q51, Q50, Q49, Q48, Q47,
- X Q46, Q45, Q44, Q43, Q42, Q41,
- X Q40, Q39, Q38, Q37, Q36, Q35,
- X Q34, Q33, Q32, Q31, Q30, Q29,
- X Q28, Q27, Q26, Q25, Q24, Q23,
- X Q22, Q21, Q20, Q19, Q18, Q17,
- X Q16, Q15, Q14, Q13, Q12, Q11,
- X Q10, Q9, Q8, Q7, Q6, Q5,
- X Q4, Q3, Q2, Q1, Q0
- X};
- X
- Xstatic setptr
- XUnion(p1, p2)
- X register setptr p1, p2;
- X{
- X register int i, j, k;
- X register setptr sp = Newset(),
- X p3 = sp;
- X
- X j = *p1;
- X *p3 = j;
- X if (j > *p2)
- X j = *p2;
- X else
- X *p3 = *p2;
- X k = *p1 - *p2;
- X p1++, p2++, p3++;
- X for (i = 0; i < j; i++)
- X *p3++ = (*p1++ | *p2++);
- X while (k > 0) {
- X *p3++ = *p1++;
- X k--;
- X }
- X while (k < 0) {
- X *p3++ = *p2++;
- X k++;
- X }
- X return (Saveset(sp));
- X}
- X
- Xstatic boolean
- XMember(m, sp)
- X register unsigned int m;
- X register setptr sp;
- X{
- X register unsigned int i = m / (setbits+1) + 1;
- X
- X if ((i <= *sp) && (sp[i] & (1 << (m % (setbits+1)))))
- X return (true);
- X return (false);
- X}
- X
- Xstatic setptr
- XInsmem(m, sp)
- X register unsigned int m;
- X register setptr sp;
- X{
- X register int i,
- X j = m / (setbits+1) + 1;
- X
- X if (*sp < j)
- X for (i = *sp + 1, *sp = j; i <= *sp; i++)
- X sp[i] = 0;
- X sp[j] |= (1 << (m % (setbits+1)));
- X return (sp);
- X}
- X
- X# ifndef SETSPACE
- X# define SETSPACE 256
- X# endif
- Xstatic setptr
- XCurrset(n,sp)
- X int n;
- X setptr sp;
- X{
- X static setword Space[SETSPACE];
- X static setptr Top = Space;
- X
- X switch (n) {
- X case 0:
- X Top = Space;
- X return (0);
- X case 1:
- X if (&Space[SETSPACE] - Top <= 15) {
- X (void)fprintf(stderr, "Set-space exhausted\n");
- X exit(1);
- X }
- X *Top = 0;
- X return (Top);
- X case 2:
- X if (Top <= &sp[*sp])
- X Top = &sp[*sp + 1];
- X return (sp);
- X }
- X /* NOTREACHED */
- X}
- X
- Xstatic void
- XSetncpy(S1, S2, N)
- X register setptr S1, S2;
- X register unsigned int N;
- X{
- X register unsigned int m;
- X
- X N /= sizeof(setword);
- X *S1++ = --N;
- X m = *S2++;
- X while (m != 0 && N != 0) {
- X *S1++ = *S2++;
- X --N;
- X --m;
- X }
- X while (N-- != 0)
- X *S1++ = 0;
- X}
- X
- Xstatic void
- XCaseerror(n)
- X int n;
- X{
- X (void)fprintf(stderr, "Missing case limb: line %d\n", n);
- X exit(1);
- X}
- X
- END_OF_FILE
- if test 28856 -ne `wc -c <'ptc.c.7'`; then
- echo shar: \"'ptc.c.7'\" unpacked with wrong size!
- fi
- # end of 'ptc.c.7'
- fi
- if test -f 'ptc.man' -a "${1}" != "-c" ; then
- echo shar: Will not clobber existing file \"'ptc.man'\"
- else
- echo shar: Extracting \"'ptc.man'\" \(2583 characters\)
- sed "s/^X//" >'ptc.man' <<'END_OF_FILE'
- XFrom enea!holtec!perb Sat May 9 17:47:50 1987
- XReceived: by mirror.TMC.COM; Sat, 9 May 87 17:47:37 edt
- XReceived: from enea.UUCP by seismo.CSS.GOV (5.54/1.14) with UUCP
- X id AA12891; Sat, 9 May 87 16:51:27 EDT
- XReceived: by enea.se (5.51/1.33)
- X id AA18863; Sat, 9 May 87 22:36:30 +0200 (MET)
- XReceived: by chalmers.UUCP id AA22220; Sat, 9 May 87 22:08:11 -0200
- XReceived: by holtec.uucp (2.0/SMI-2.0)
- X id AA12513; Sat, 9 May 87 21:24:27 -0200
- XDate: Sat, 9 May 87 21:24:27 -0200
- XFrom: enea!holtec!perb (Per Bergsten)
- XMessage-Id: <8705091924.AA12513@holtec.uucp>
- XTo: mirror!sources
- XStatus: R
- X
- XSubject: ptc.man
- X.\" @(#)ptc.man 1.3 Date 87/05/09
- X.if \nP .pl \nP
- X.TH PTC 1
- X.SH NAME
- Xptc \- Pascal to C translator
- X.SH SYNOPSIS
- X.B ptc
- X< pascal\ source > c\ source
- X.SH DESCRIPTION
- X.I Ptc
- Xreads a correct Pascal program and prints a C program with
- Xthe same behaviour.
- XIt is intended as a tool for transporting finished applications to
- Xenvironments that lack Pascal compilers,
- Xit is
- X.I not
- Xintended for program development.
- X.PP
- XThe input should comply with the ISO level 0 Pascal definition.
- XTwo common Pascal extensions are also recognized: the keyword
- X.B otherwise
- Xmay be used for default entries in case-statements,
- Xthe keyword
- X.B external
- Xmay be used in place of the forward directive to signify that
- Xa procedure or function is defined in a library.
- XFurthermore,
- Xthe translator does not require a complete Pascal program,
- Xa consistent subset of declarations can be translated.
- XThus a primitive module concept is supported.
- X.SH "SEE ALSO"
- XPtc implementation notes.
- X.SH CAVEATS
- XThe quality of an object program is of course highly dependent on the
- XC compiler that processes the translated code.
- XArithmetic operations are sometimes implemented in a way that is incompatible
- Xwith the Pascal definition.
- XFor example, the translator assumes that:
- X.sp
- X.nf
- X a := b mod c
- X.fi
- X.sp
- Xcan be accurately translated into
- X.sp
- X.nf
- X a = b % c
- X.fi
- X.sp
- Xbut that may not be true if c is negative.
- XA check on the characteristics of integer and float arithmetic is
- Xstrongly recommended.
- X.PP
- XSome Pascal constructs are impossible to express in C.
- XThe translator will not object to:
- X.sp
- X.nf
- X type ptr = ^ ptr;
- X.fi
- X.sp
- Xbut a C-compiler may balk at the resulting:
- X.sp
- X.nf
- X typedef ptr * ptr;
- X.fi
- X.sp
- X.SH BUGS
- XThe program can't translate comments from Pascal to C.
- X.sp
- XThe translator does not do complete typechecking so
- Xa Pascal program that isn't formally correct may cause malfunction.
- X.sp
- XPassing a procedure as parameter to an enclosing recursive procedure
- Xmay produce erroneous code (see the implementation notes).
- X
- END_OF_FILE
- if test 2583 -ne `wc -c <'ptc.man'`; then
- echo shar: \"'ptc.man'\" unpacked with wrong size!
- fi
- # end of 'ptc.man'
- fi
- echo shar: End of archive 1 \(of 12\).
- cp /dev/null ark1isdone
- MISSING=""
- for I in 1 2 3 4 5 6 7 8 9 10 11 12 ; do
- if test ! -f ark${I}isdone ; then
- MISSING="${MISSING} ${I}"
- fi
- done
- if test "${MISSING}" = "" ; then
- echo You have unpacked all 12 archives.
- rm -f ark[1-9]isdone ark[1-9][0-9]isdone
- else
- echo You still need to unpack the following archives:
- echo " " ${MISSING}
- fi
- ## End of shell archive.
- exit 0
- --
-
- Rich $alz "Anger is an energy"
- Cronus Project, BBN Labs rsalz@bbn.com
- Moderator, comp.sources.unix sources@uunet.uu.net
-